package Capa_Modelo;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Query;

import Capa_Datos.CD_Curso;
import Capa_Datos.CD_Horario;
import Capa_Datos.CD_Laboratorio;
import Capa_Datos.CD_Unidad;

public class CM_ImplRegistroLabUnidad extends CM_BaseDao implements CM_RegistroLabUnidad{

	public CM_ImplRegistroLabUnidad(){
		super();
		
	}
	
	
	@Override
	public List<CD_Laboratorio> obtenerAsignados(int unidad) {
		List<CD_Laboratorio> lista_asignados;
		try{
			
			lista_asignados= new ArrayList<CD_Laboratorio>();
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT a FROM CD_Laboratorio a WHERE a.unidad.idUnidad =: codigo");
			//Query q=em.createQuery("SELECT a.Curso FROM CD_Eap a where a.idEAP =: codigo");
			
			q.setParameter("codigo",unidad);
			//Query q=em.createQuery("SELECT a FROM CD_Curso a");
		    lista_asignados=q.getResultList();
		    
		    em.getTransaction().commit();
		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR--->"+e);
			return null;
			
		}
		return lista_asignados;
		
	}


	@Override
	public void asignarLaboratorio(int unidad, int laboratorio) {
		List<CD_Unidad> lista_unidades= new ArrayList<CD_Unidad>();
		List<CD_Laboratorio> lista_laboratorio= new ArrayList<CD_Laboratorio>();
		CD_Laboratorio selectedLaboratorio = new CD_Laboratorio();
		CD_Unidad selectedUnidad = new CD_Unidad();
		try{			
			lista_unidades= new ArrayList<CD_Unidad>();
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT a FROM CD_Unidad a WHERE a.idUnidad =: codigob");			
			q.setParameter("codigob",unidad);			
			lista_unidades=q.getResultList();
			selectedUnidad = lista_unidades.get(0);
		    em.getTransaction().commit();		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR999--->"+e);			
		}
		
	try{									
			selectedLaboratorio=em.find(CD_Laboratorio.class, laboratorio);
			selectedLaboratorio.setUnidad(selectedUnidad);
			em.merge(selectedLaboratorio);		    		    		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR777--->"+e);
						
		}		
	}

	@Override
	public List<CD_Laboratorio> obtenerLaboratorio() {
		List<CD_Laboratorio> lista_laboratorios;
		try{
			
			lista_laboratorios= new ArrayList<CD_Laboratorio>();
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT a FROM CD_Laboratorio a WHERE a.unidad =: codigo");
			q.setParameter("codigo",null);
		    lista_laboratorios=q.getResultList();		    
		    em.getTransaction().commit();
		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR--->"+e);
			return null;
			
		}
		return lista_laboratorios;
		
		
	}


	@Override
	public List<CD_Unidad> obtenerUnidades() {
		List<CD_Unidad> lista_unidades;
		try{
			
			lista_unidades= new ArrayList<CD_Unidad>();
			em.getTransaction().begin();
			Query q=em.createQuery("SELECT b FROM CD_Unidad b");			
		    lista_unidades=q.getResultList();		    
		    em.getTransaction().commit();
		    
		}catch(Exception e){
			System.out.print("EEEEEEEEEERROR--->"+e);
			return null;
			
		}
		return lista_unidades;
		
	}


	@Override
	public void eliminarLaboratorio(int unidad, int laboratorio) {
		CD_Laboratorio selectedLaboratorio = new CD_Laboratorio();		
		try{									
			selectedLaboratorio=em.find(CD_Laboratorio.class, laboratorio);
			selectedLaboratorio.setUnidad(null);
			em.merge(selectedLaboratorio);		    		    		    
		}catch(Exception e){
			
			System.out.print("EEEEEEEEEERROR555--->"+e);
						
		}		
		
	}

}
